// 剩余参数
// 必要参数,默认参数和可选参数有个共同点: 
// 他们表示某一个参数
// 有时,你想同时操作多个参数,
// 或者你并不知道会有多好参数传递进来
// 或者里并不知道会有多少个参数传递进来
// 在javascript里,
// 你可以使用arguments来访问所有的参数
// 在Typescript里 你可以把所有参数收集到一个变量里:
// 和ES6的reset一个道理

function buildName(firstName:string,lastName?:string,...restName:string[]){
    return firstName + " " + lastName + restName.join(" ");
}
let result3 = buildName("windows","Mac OS","Linux","Deepin");// right 刚刚好
// console.log(result3);
// 剩余的参数会被当作个数不限的可选参数, 可以一个都没有,同样也可以有任意个
// 编译器创建参数数组, 名字实例在省略号(...)后迷茫给定的名字,
// 你可以在函数体内使用这个数组


// this
// 在javascript里,this的值有两大类确定逻辑:
// 在不同函数内, this的值指的就是调用该函数的对象
// 在箭头函数内, this的值指的就是定义改函数时所在的环境对象
// typescript 沿袭了ES6的设计

let deck = {
    suits:['header','spades','clubs','diamons'],
    cards:Array(52),
    createCardPicker:function(){
        return ()=>{
            let pickedCard = Math.floor(Math.random()*52);
            let pickSuit   = Math.floor(pickedCard / 13 );
            return {suit:this.suits[pickedCard],card:pickedCard % 13}
        }
    }
}
let cardPicker = deck.createCardPicker();
let pickedCard = cardPicker();

alert("card:"+pickedCard.card +"of"+pickedCard.suit)
